package com.ssyt.yt1.day12;

/**
 * 1、由于String不可变，在拼接时会产生很多对象！所以JDK提供了StringBuilder和StringBuffer<br/>
 * 2、StringBuilder（线程不安全，效率高）、StringBuffer(线程安全，效率相对低一点)<br/>
 * 3、全局变量容易引发线程问题，必须使用StringBuffer，而局部变量尽量使用StringBuilder！
 * 
 * @author Administrator
 *
 */
public class StringBuilderAndStringBufferDemo {

	/**
	 * StringBuilder的基本测试
	 */
	public static void test1() {
		// 16
		// StringBuilder sb = new StringBuilder();
		// 默认开辟21，使用了5个
		StringBuilder sb = new StringBuilder("hello");
		// // 又使用了5个，还剩下11个
		// sb.append("world");
		// // 应该又使得12个，又开辟了新空间：21 * 2 + 2 = 44，还剩下22个
		// sb.append("12345678910j");
		// // 又使用了1个，还剩下21
		// sb.append("a");

		// 通过this实现链式编程
		sb.append("world").append("12345678910j").append("a");
	}

	/**
	 * 字符串拼接
	 */
	public static void test2() {
		StringBuilder str = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			str.append(i + "");
		}
		System.out.println(str.toString());
	}

	/**
	 * 反转
	 */
	public static void test3() {
		StringBuilder sb = new StringBuilder("hello");
		System.out.println(sb.reverse());
	}

	/**
	 * 删除和新增字符串
	 */
	public static void test4() {
		String hello = "hello";
		StringBuilder sb = new StringBuilder(hello);

		sb.delete(hello.indexOf("l"), hello.length());
		System.out.println(sb);

		sb.insert(sb.length(), "llo");
		System.out.println(sb);
	}

	public static void main(String[] args) {
		// test1();
		// test2();
		// test3();
		// test4();
	}
}
